package com.ruoyi.service;

import com.ruoyi.api.common.R;
import com.ruoyi.domain.*;
import com.ruoyi.dto.*;
import com.ruoyi.platform.core.domain.entity.SysDictData;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;

public interface FrontService {

    /**
     * 前台用户登陆
     *
     * @param dto
     * @return
     */
    String doLogin(FrontUserLoginDto dto);

    /**
     * 前台-查询可展示轮播图
     *
     * @return
     */
    List<Banner> selectBannerList(Integer type);

    /**
     * 前台-查询在线演示
     *
     * @return
     */
    List<OnlineShow> onlineShowList();

    /**
     * 前台-查询源码地址
     *
     * @return
     */
    List<SourceCodeUrl> sourceCodeList();

    /**
     * 前台-查询组件和系统
     *
     * @return
     */
    List<ModuleInfo> extendComponentList(String type);

    /**
     * 前台-加载在线文档目录树
     *
     * @return
     */
    List<CategoryTree> documentTreeData(Long type);

    /**
     * 前台-查询文档地址
     *
     * @param id
     * @return
     */
    String selectFileUrl(Integer id);

    /**
     * 前台-在线文档默认显示第一个文档
     *
     * @return
     */
    Long selectFirstFile();

    Long selectDocIdByModuleName(String moduleName);

    /**
     * 前台-智联空间目录树
     *
     * @return
     */
    List<SpaceDirectoryTree> getSpaceDirectoryTree();

    List<SpaceDirectory> getDirectorySelectTree();

    List<SpaceDirectory> getIndexSpaceDirectoryTree(Long userId, String type);

    String getSpaceDocUrl(Long spaceFileId);

    int addSpaceDirectory(SpaceDirectory spaceDirectory);

    int addSpaceDocument(List<SpaceDocument> spaceDocument);

    int addCollection(Long documentId);

    int removeSpaceDocument(Long id);

    int removeSpaceDirectory(Long id);

    DocumentFile upload(MultipartFile file);

    void updateSpaceDirectory(SpaceDirectory spaceDirectory);

    void download(HttpServletRequest req, HttpServletResponse res, Long spaceDocId);

    /**
     * `
     * 查询文档类别统计
     *
     * @return
     */
    List<Map<String, Object>> getSpaceDocumentStatInfo();

    /**
     * 查询智联空间动态
     */
    List<DynamicRecord> getSpaceDynamicRecord(Integer page);

    /**
     * 模糊查询智联文档
     *
     * @param searchItem 搜索项
     */
    List<SpaceDirectory> fuzzySearchSpaceDoc(String searchItem, Long type);


    /**
     * 查询下载/阅读
     *
     * @param type      类别
     * @param timeSpan  时间跨度
     * @param startTime 起始时间
     * @param endTime   结束时间
     */
    List<SpaceRecord> getOperateCountRank(Long type, String timeSpan, LocalDate startTime, LocalDate endTime, Integer currentPage);

    List<SpaceRecord> getUploadRank(Long type, String timeSpan, LocalDate startTime, LocalDate endTime);

    SpaceDocumentDetail getSpaceDocumentDetail(Long documentId);

    List<PersonalDocInfo> getRecordByUserId(String userId, String recordType, String documentName, Integer page);

    List<SpaceCollection> getCollectByUserId(String userId, String documentName, Integer page);

    Integer getPersonCount();

    List<SysDictData> selectDocumentType(String dictType);

    List<SysDictData> selectDirectoryType();

    SpaceDirectory selectDirectoryById(Long id);

    int removeCollection(Long documentId);

    void moveDirectory(Long id,Long parent,Long type);

    List<SpaceDirectory> getParentDirectoryNode(Long docId, Long directoryId);

    List<SpaceDirectory> getFirstIndexSpaceDirectoryTree(Long userId, Long type);

    Integer getTotal(String valueOf, String recordType, String documentName);

    Integer getCollectTotal(String valueOf, String documentName);

    Integer selectAllDynamicRecordCount();

    Long getDirectoryFirstDocId(Long directoryId);

    List<SysDictData> getFileTypeWithSuffix(String type);

    List<SpaceDocumentDetail> getImagesUnderDirectory(Long docId);
}
